#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author Luis Shou
@date: 1/12/2014
@obs: Este módulo contem a classe e métodos que permitem 
a leitura do ficheiro 'IPC_Portugal_1977_2013.xls'
e a criação da base de dados sqlite3.
"""

import sqlite3
import xlrd
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session, sessionmaker

base = declarative_base()
db_session = scoped_session(sessionmaker())

class DadosTabela(base):
	"""
	Cria a variável __tablename__ com uma tabela dados
	"""
	__tablename__ = "Dados"
	id = Column(Integer, primary_key = True)
	Ano = Column(String(4))
	IPC_Global = Column(String(10))
	Variacao_Anual = Column(String(5))
	Remuneracao_minima_mensal = Column(String(10))
	Remuneracao_maxima_mensal = Column(String(10))
	PIB_per_capita_anual = Column(String(10))
	Rendimento_nacional_bruto_per_capita_anual = Column(String(10))
	Rendimento_disponivel_bruto_per_capita_anual = Column(String(10))
	Remuneracoes_per_capita_anual = Column(String(10))

def init_sqlalchemy():
	"""
        Função que contem a leitura e escrita na base de dados sqlite3.

	"""

	#abre o ficheiro de excel 
	ficheiro_excel = xlrd.open_workbook('IPC_Portugal_1977_2013.xls')
	global db
	directoria = 'sqlite:///sqlalchemy.db'
	db = create_engine(directoria, echo = True)
	db_session.configure(bind = db, autoflush = False, expire_on_commit = False)
	base.metadata.drop_all(db) #Apaga a tabela se já existir
	base.metadata.create_all(db)

	excel_sheet = ficheiro_excel.sheet_by_name("Dados")
	first_col = 1
	first_row = 1
	last_row = 38

        #insere os dados nas tabelas
	db.execute(
		DadosTabela.__table__.insert(),
		[{
			"Ano": excel_sheet.cell(n, first_col).value,
			"IPC_Global": excel_sheet.cell(n, first_col + 1).value,
			"Variacao_Anual": excel_sheet.cell(n, first_col + 2).value,
			"Remuneracao_minima_mensal": excel_sheet.cell(n, first_col + 3).value,
			"Remuneracao_maxima_mensal": excel_sheet.cell(n, first_col + 4).value,
			"PIB_per_capita_anual": excel_sheet.cell(n, first_col + 5).value,
			"Rendimento_nacional_bruto_per_capita_anual": excel_sheet.cell(n, first_col + 6).value,
			"Rendimento_disponivel_bruto_per_capita_anual": excel_sheet.cell(n, first_col + 7).value,
			"Remuneracoes_per_capita_anual": excel_sheet.cell(n, first_col + 8).value
		} for n in range(first_row, last_row)]
	)
